﻿using SocialApi.Core.Extensions;

namespace SocialApi.Instagram.Exceptions
{
    /// <summary>
    /// Перехват ошибок авторизации
    /// </summary>
    public class IntsagramApiException : IntsagramException
    {
        /// <summary>
        /// Ошибка авторизации
        /// </summary>
        public string Error { get; private set; }

        /// <summary>
        /// Причина ошибки
        /// </summary>
        public string Reason { get; private set; }

        /// <summary>
        /// Описание ошибки
        /// </summary>
        public string Description { get; private set; }

        /// <summary>
        /// Создаёт новый экземпляр класса <see cref="IntsagramApiException" />
        /// </summary>
        /// <param name="error">Сообщение об ошибке</param>
        public IntsagramApiException(string error) : base(error) { }

        /// <summary>
        /// Создаёт новый экземпляр класса <see cref="IntsagramApiException" />
        /// </summary>
        /// <param name="error">Сообщение об ошибке</param>
        /// <param name="reason">Причина ошибки</param>
        /// <param name="description">Описание ошибки</param>
        public IntsagramApiException(string error, string reason, string description)
            : this(error)
        {
            error = error.Replace("_", " ").Replace("+", " ");
            Error = string.Format("{0}{1}", error.Substring(0, 1).ToUpperInvariant(), error.Remove(0, 1));
            if (reason.Exists())
            {
                reason = reason.Replace("_", " ").Replace("+", " ");
                Reason = string.Format("{0}{1}", reason.Substring(0, 1).ToUpperInvariant(), reason.Remove(0, 1));
            }
            else
            {
                Reason = "Неизвестная причина";
            }
            if (description.Exists())
            {
                description = description.Replace("_", " ").Replace("+", " ");
                Description = string.Format("{0}{1}", description.Substring(0, 1).ToUpperInvariant(), description.Remove(0, 1));
            }
            else
            {
                Description = "Неизвестное описание";
            }
        }
    }
}